<?Php

    /**
     * View-компонент модели MVC
     */

    interface ViewInt {
        public static function displayError($data, $error, $htmlstatecode );    // показываем ошибки
        public static function displayPage ($data, $page, $result);             // показываем конкретную страничку
        
        // подключаются темплейты
        // выделены в отдельные методы с перспективой расширения функционала
        //private static function displayHeader( $data, $page );
        //private static function displayFooter( $data, $page );
    }


    // View-компонент модели MVC    
    class View implements ViewInt {


        /**
         * показываем ошибки
         */
        public static function displayError( $data, $error, $htmlstatecode ) {
            header("HTTP/1.1 404 Not Found"); 
            view::displayHeader( $data );
                if ($data['pageLang']=='rus'){
                    echo '<b>код ошибки: '.$htmlstatecode.'</b><BR><BR>'; // заглушка
                    if ($htmlstatecode==404)echo 'Страница с таким адресом не найдена.<BR><BR>';
                    if ($htmlstatecode==403)
                        if ($data['loginData']['account'])echo 'У вас недостаточно прав для просмотра этой страницы!';
                        else echo 'Пожалуйста, <a onClick="showLoginTab(\''.$_SERVER['REQUEST_URI'].'\'); return false;" class="thic" style="border-bottom: 1px dotted; cursor: pointer;">авторизуйтесь</a> для доступа к этой странице!<BR><BR>';
                }
                if ($data['pageLang']=='eng'){
                    echo '<b>error code: '.$htmlstatecode.'</b><BR><BR>'; // заглушка
                    if ($htmlstatecode==404)echo 'Can not find requested page.<BR><BR>';
                    if ($htmlstatecode==403)
                        if ($data['loginData']['account'])echo 'You have no privileges to get this page!';
                        else echo 'Please, <b>login</b> for access to this page!<BR><BR>';
                }
                if ($error!==true)echo $error;
            view::displayFooter( $data );
            
        } // displayError



        /**
         * показываем конкретную страничку
         */
        public static function displayPage( $data, $page, $result ){
            header('HTTP/1.0 200 OK');
            view::displayHeader( $data, $page );
                if ($page['outter_file']){ // если внешний файл
                    if ($page['plugin_id']>0){
                        $pref = preferences::getInstance();
                        $plugIns = $pref -> getProperty('plugInsInfo');
                        $folder = $plugIns[$page['plugin_id']]['folder'];
                        $filename = dirname(__FILE__) . '/' . $folder . '/views/_pages/' . $page['content_filename'] . '.view';
                    }
                    else
                        $filename = 'include/views/_pages/' . $page['content_filename'] . '.view';
                    $filename = str_replace('/', DIRECTORY_SEPARATOR, $filename);
                    $filename = str_replace('\\', DIRECTORY_SEPARATOR, $filename);
                    require_once( $filename );
                    // инклудили view-компонент
                }
                elseif ($page['inner_content']){ // если содержимое файла лежит в базе данных
                    echo $page['content'];
                }
                else { // если страница прописана, но её нет
                    if ($data['pageLang']=='rus')echo ('страница в разработке!<BR><BR>');
                    if ($data['pageLang']=='eng')echo ('this page is under construction!<BR><BR>');
                }
            view::displayFooter( $data, $page );
        } // displayResults



        /**
         * подключаются темплейты
         * выделены в отдельные методы с перспективой расширения функционала
         */
        private static function displayHeader( $data, $page ){
            header("Content-Type: text/html; charset=utf-8"); // чтобы никаких этих ваших cp1251

            $lt = $page['lifetime_reged'];
            if (empty($_COOKIE[session_name()]))$lt = $page['lifetime_unreged'];

            // время жизни страницы - нужно преимущественно для nginx
            if ($lt == 0){
                header("Cache-Control: no-cache, must-revalidate");
                header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
            }
            else{
                header("Date: ".gmdate("D, d M Y H:i:s", time())." GMT"); 
                header("Last-Modified: ".gmdate("D, d M Y H:i:s", time())." GMT");; 
                header("Expires: ".gmdate("D, d M Y H:i:s", time() + $lt)." GMT");
                header("Cache-Control: max-age={$lt}, public");
            }

            $pref = preferences::getInstance();
            $e = $pref->getProperty('design_template_folder'); $adx = '';
            if ($e)$adx = $e . DIRECTORY_SEPARATOR;
            if ($data['pageLang']=='rus'){
                if ($page['view'] == 'brief')   require_once( 'include/views/_templates/' . $adx . 'header-brief.php' );
                else                            require_once( 'include/views/_templates/' . $adx . 'header.php' );
            }
            if ($data['pageLang']=='eng'){
                if ($page['view'] == 'brief')   require_once( 'include/views/_templates/' . $adx . 'header-brief.eng.php' );
                else                            require_once( 'include/views/_templates/' . $adx . 'header.eng.php' );
            }
        }



        private static function displayFooter( $data, $page ){
            $pref = preferences::getInstance();
            $e = $pref->getProperty('design_template_folder'); $adx = '';
            if ($e)$adx = $e . DIRECTORY_SEPARATOR;
            if ($data['pageLang']=='rus'){
                if ($page['view'] == 'brief')   require_once( 'include/views/_templates/' . $adx . 'footer-brief.php' );
                else                            require_once( 'include/views/_templates/' . $adx . 'footer.php' );
            }
            if ($data['pageLang']=='eng'){
                if ($page['view'] == 'brief')   require_once( 'include/views/_templates/' . $adx . 'footer-brief.eng.php' );
                else                            require_once( 'include/views/_templates/' . $adx . 'footer.eng.php' );
            }
        }
        

    } // class View

?>